描述
送礼物,给出礼物种类和个数,给出要求。问最多能送多少人;
- 所有人坐一排。
 
- 每人两个礼物,一个神秘,一个基本礼物。
 
- 相邻的基本礼物不能相同,神秘礼物无限制。
 
- 礼物要连续分发。
 
思路
首先,最理想的情况是分礼物总和数sum/2个人
先假设让礼物数最多的A,铺满sum/2的长度。如果这时候A还有大于(sum/2 + 1)个,那么A肯定会有剩余。
其他情况都是sum/2。
A > (sum/2)+(sum/2 +1)时,只能满足2 * (sum-A)+1
AC代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 
  | #include <iostream> #include <cstdio> #include <stack> #include <queue> #include <cstring> #include <algorithm> using namespace std; #define ll long long int a[15]; int main() {     int n,m,T,cas=1;     scanf("%d",&T);     while(T--)     {         scanf("%d",&n);         ll sum=0;         for(int i=0;i<n;i++)         {             scanf("%d",&a[i]);             sum+=a[i];         }         int ans,i,f=1;         for(i=n-1;i>=0;i--)             if(a[i]>sum/2+(sum/2+1)/2)                 f=0;break;         if(f)ans=sum/2;         else ans=2*(sum-a[i])+1;         printf("Case #%d: %d\n",cas++,ans);     }     return 0; } 
  |